﻿package scrn;


import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.plaf.metal.*;


public class Test05 implements ActionListener {

private static String labelPrefix = "Number of button clicks: ";
private int numClicks = 0;
final JLabel label = new JLabel(labelPrefix + "0    ");

// Specify the look and feel to use by defining the LOOKANDFEEL constant
// Valid values are: null (use the default), "Metal", "System", "Motif",
// and "GTK"
final static String LOOKANDFEEL = "Metal";

// If you choose the Metal L&F, you can also choose a theme.
// Specify the theme to use by defining the THEME constant
// Valid values are: "DefaultMetal", "Ocean",  and "Test"
final static String THEME = "Test";


public Component createComponents() {

	JButton button = new JButton("I'm a Swing button!");
	button.setMnemonic(KeyEvent.VK_I);
	button.addActionListener(this);
	label.setLabelFor(button);

	/*
	 * An easy way to put space between a top-level container and its contents is
	 * to put the contents in a JPanel that has an "empty" border.
	 */
	JPanel pane = new JPanel(new GridLayout(0, 1));
	pane.add(button);
	pane.add(label);
	pane.setBorder(BorderFactory.createEmptyBorder(30, //top
			30, //left
			10, //bottom
			30) //right
			);

	return pane;
}


public void actionPerformed(ActionEvent e) {

	numClicks++;
	label.setText(labelPrefix + numClicks);
}


private static void initLookAndFeel() {

	String lookAndFeel = null;

	if (LOOKANDFEEL != null) {
		if (LOOKANDFEEL.equals("Metal")) {
			lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
			//  an alternative way to set the Metal L&F is to replace the 
			// previous line with:
			// lookAndFeel = "javax.swing.plaf.metal.MetalLookAndFeel";

		}

		else if (LOOKANDFEEL.equals("System")) {
			lookAndFeel = UIManager.getSystemLookAndFeelClassName();
		}

		else if (LOOKANDFEEL.equals("Motif")) {
			lookAndFeel = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
		}

		else if (LOOKANDFEEL.equals("GTK")) {
			lookAndFeel = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
		}

		else {
			System.err.println("Unexpected value of LOOKANDFEEL specified: "
					+ LOOKANDFEEL);
			lookAndFeel = UIManager.getCrossPlatformLookAndFeelClassName();
		}

		try {


			UIManager.setLookAndFeel(lookAndFeel);

			// If L&F = "Metal", set the theme

			if (LOOKANDFEEL.equals("Metal")) {
				if (THEME.equals("DefaultMetal"))
					MetalLookAndFeel.setCurrentTheme(new DefaultMetalTheme());
				else if (THEME.equals("Ocean"))
					MetalLookAndFeel.setCurrentTheme(new OceanTheme());
				//				else
				//					MetalLookAndFeel.setCurrentTheme(new TestTheme());

				UIManager.setLookAndFeel(new MetalLookAndFeel());
			}


		}

		catch (ClassNotFoundException e) {
			System.err.println("Couldn't find class for specified look and feel:"
					+ lookAndFeel);
			System.err.println("Did you include the L&F library in the class path?");
			System.err.println("Using the default look and feel.");
		}

		catch (UnsupportedLookAndFeelException e) {
			System.err.println("Can't use the specified look and feel ("
					+ lookAndFeel + ") on this platform.");
			System.err.println("Using the default look and feel.");
		}

		catch (Exception e) {
			System.err.println("Couldn't get specified look and feel (" + lookAndFeel
					+ "), for some reason.");
			System.err.println("Using the default look and feel.");
			e.printStackTrace();
		}
	}
}


/**
 * Create the GUI and show it. For thread safety, this method should be invoked
 * from the event dispatch thread.
 */
private static void createAndShowGUI() {

	//Set the look and feel.
	initLookAndFeel();

	//Make sure we have nice window decorations.
	JFrame.setDefaultLookAndFeelDecorated(true);

	//Create and set up the window.
	JFrame frame = new JFrame("SwingApplication");
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	Test05 app = new Test05();
	Component contents = app.createComponents();
	frame.getContentPane().add(contents, BorderLayout.CENTER);

	//Display the window.
	frame.pack();
	frame.setVisible(true);
}


public static void main(String[] args) {

	//Schedule a job for the event dispatch thread:
	//creating and showing this application's GUI.
	javax.swing.SwingUtilities.invokeLater(new Runnable() {

		public void run() {

			createAndShowGUI();
		}
	});
}
}
